// ==UserScript==
// @icon            https://yanxiu.qlteacher.com/assets/img/logo.png
// @name            观评课评价一键填写并保存草稿
// @author          idoo
// @description     山东教师教育网观评课评价一键填写并保存草稿
// @include          *yanxiu.qlteacher.com/project/2020sxzj/classview/evaluateview/*
// @version         0.0.1
// @require      https://cdn.jsdelivr.net/npm/jquery@3.2.1/dist/jquery.min.js
// @run-at document-end
// ==/UserScript==

(function () {

    var first = ['这节课好的部分是', '首先', '这节课', '对于这节课', '对于本课', '本课堂', '本节课'];
    var but = ['但是', '美中不足的是', '不足的是', '不过', '然而', '可是', '可惜'];
    var then = ['然后', '其次', '并且', '接着', '另外', '另一方面', '还有', '除此之外'];
    var end = ['最后', '总之', '总体来说', '总体上讲', '总而言之', '整体来讲', '整体来说'];

    var good0 = ['教材与学情分析准确', '教材与学情分析全面', '教学目标明确、具体、可观测、可操作、可评价', '教学目标明确、具体,体现三维目标整体要求', '重点、难点处理符合学生认知规律', '情境与活动设计指向问题解决'];
    var bad0 = ['教师对本课程的备课可能不太充分', '忽视了一些小细节', '某些知识点讲解的不够充分', '对学生不够了解', '不能联系实际生活', '对学生心理活动关注不够'];
    var good1 = ['教学环节相对完整、过程流畅、结构清晰', '教学环节相对完整、过程流畅,时间布局合理', '课堂容量适当,时间布局合理', '教学环节相对完整、过程流畅、结构清晰'];
    var bad1 = ['备课可能不太充分', '部分场景有太拖延', '节奏比较快', '节奏有些地方较快', '课堂内容过于丰富', '课堂内容过于简洁', '教师没有完全把握课堂的整体节奏'];
    var good2 = ['教学组织形式多样,方法有效', '引导学生自主、合作、探究学习', '反馈和评价及时恰当', '教学组织形式多样,反馈和评价及时恰当', '教学组织方法有效,引导学生自主合作'];
    var bad2 = ['缺少与实际生活的联系', '教师主导地位过强', '多媒体等教具的使用不够充分', '缺乏主动探究活动', '学生学习兴趣不足', '学生学习动机不够强烈', '学生上课发言不够积极'];
    var good4 = ['熟练、合理地应用信息技术手段识', '应用信息技术支持学生学习、课堂交流和教学评价', '应用数字资源改变教学内容呈现方式', '帮助学生理解、掌握和应用知识', '合理地应用信息技术手段,应用信息技术支持学生学习,掌握和应用知识'];
    var bad4 = ['教师对office套件的使用不够熟练', '使用多媒体教具时不够熟练', '内容过于静态缺少动态幻灯片', '课件页面过于简陋', '部分课件内容不是非常适合教材'];
    var good3 = ['面向全体、注重差异', '学生参与面广,突出学生主体性和教学互动性', '突出学生主体性和教学互动性', '面向全体、学生参与面广', '注重教学互动性'];
    var bad3 = ['缺乏主动探究活动', '学生学习兴趣不足', '学生学习动机不够强烈', '学生对教师过于依赖', '教师仍处于主导地位', '学生上课发言不够积极'];
    var good5 = ['使用普通话,语言准确、生动', '语言准确、生动、富有激情和启迪性', '使用普通话,教态亲切和蔼', '在教学策略、方法、手段上有独到之处、有亮点'];
    var bad5 = ['某些时候教师发言语气过于强硬', '教师说话声音有时太小不够洪亮', '某些时候对学生不够关心', '对后排的学生不非常关心', '课上只提问固定部分学生,不够民主'];
    var good6 = ['学生学习兴趣浓厚,积极主动', '学生学习积极主动,参与度高', '学生在学习活动中获得良好体验,课堂气氛活跃有序', '学生学习兴趣浓厚,课堂气氛活跃有序'];
    var bad6 = ['缺乏主动探究活动', '学生学习动机不够强烈', '学生对教师过于依赖', '教师仍处于主导地位', '学生上课发言不够积极', '课堂氛围过于严肃不够活泼'];
    var good7 = ['完成本节课既定的教学目标', '使不同层次的学生都能基本掌握本节课所学知识,并各有收获', '不同层次的学生都能有收获', '完成了教学目标,使不同层次的学生都能基本掌握本节课所学知识'];
    var bad7 = ['教师对本课程的备课可能不太充分', '忽视了一些小细节', '某些知识点讲解的不够充分', '对后排的学生不非常关心', '课上只提问固定部分学生,不够民主'];
    var good8 = ['能推动学生在学科思维、实践能力', '推动情感态度等某一方面得到有效发展', '加强学科知识与生活联系,引导学生解决现实生活中的实际问题', '引导学生解决现实生活中的实际问题'];
    var bad8 = ['缺乏主动探究活动', '学生学习动机不够强烈', '学生对教师过于依赖', '教师仍处于主导地位', '学生上课发言不够积极', '课堂氛围过于严肃不够活泼'];
    var good9 = ['课件界面组织合理、信息完整、语言规范', '课件运行正常,链接准确', '视频拍摄内容完整、画面清晰,声画同步', '课件内容完整、画面清晰,声画同步'];
    var bad9 = ['教师对office套件的使用不够熟练', '使用多媒体教具时不够熟练', '内容过于静态缺少动态幻灯片', '课件页面过于简陋', '部分课件内容不是非常适合教材'];
    var good10 = [
        '教材与学情分析准确、全面,教学目标明确、具体、可观测、可操作、可评价,体现三维目标整体要求',
        '创设丰富多彩的情境,为学生对新知的探究和整节课教学任务的完成起到了举足轻重的作用',
        '面向全体、注重差异,学生参与面广,教学环节相对完整、过程流畅、结构清晰,反馈和评价及时恰当',
        '创设丰富多彩的情境,为学生对新知的探究和整节课教学任务的完成起到了举足轻重的作用',
        '完成本节课既定的教学目标,使不同层次的学生都能基本掌握本节课所学知识,并各有收获',
        '应用信息技术支持学生学习、课堂交流和教学评价,应用数字资源改变教学内容呈现方式,帮助学生理解、掌握和应用知识',
        '语言准确、生动、富有激情和启迪性,教态亲切和蔼,在教学策略、方法、手段上有独到之处、有亮点',
        '能推动学生在学科思维、实践能力和情感态度等某一方面得到有效发展,加强学科知识与生活联系,引导学生解决现实生活中的实际问题',
        '课堂气氛活跃有序,学生学习兴趣浓厚,积极主动,参与度高,能推动学生在学科思维、实践能力和情感态度等某一方面得到有效发展',
        '教材与学情分析准确、全面,课堂气氛活跃有序,使不同层次的学生都能基本掌握本节课所学知识,并各有收获',
        '教学任务的设计符合本课的教学目标,符合学生的兴趣特点,“任务”和“驱动”之间的统一性和任务的层次性得到了较好地体现,学生在完成任务的同时,完成教学目标',
        '教学设计符合新课标的理念和要求,发挥了学生的主体性和主动性,体现了教师的主导作用',
        '任务的设计体现了学生的个性发展和创新意识,教学目标明确、具体、可观测、可操作、可评价,体现三维目标整体要求',
        '让学生由最熟悉的生活场景入手,使学生体会数学无处不在,数学无处不用的情景,增强了学生的感性认识,从而激发了学生的学习热情',
        '通过探究式教学法,把课堂的自主权交给学生,让学生真正成为课堂的主人,而不再是传统教学当中学生就是被“填鸭式”的盲目接受教学结论,充分体现了学生的主体作用',
        '通过分组讨论学习和学生自己动手操作和归纳,加强了学生在教学过程中的实践活动,也使学生之间的合作意识更强,与同学交流学习心得的气氛更浓厚',
    ];
    var bad10 = [
        '有学生没有融入到小组的合作学习中来,个别组存在一人包揽全局的情况,学生展示自己个性的时间相对较少,教师应该发现问题及时解决',
        '在对学生的解题过程中说理能力上强调的不够,对内容的学习,要引导学生学会用准确的符号语言进行正确的说理',
        '没有很好的进行板书和照顾基础稍微弱一点的学生,所以容易使得这部分的同学对于知识有点一知半解,没有掌握扎实',
        '学生缺乏“表演”的机会,老师经常是带着学生一起解题,所以失去了个体的作用,也不能很好地体现个体学习的效果',
        '老师经常是带着学生一起解题,所以失去了个体的作用,老师应该给予充足的鼓励给学生表现,才能使人人均有想学想表达的愿望',
        '对于某些问题上,数学语言不够规范化,教师应当用数学语言进行规范化解题和证明,要多加强调',
        '老师更应该循序渐进的指导学生的说理过程,不能自己说完而不给学生消化的时间.本节课教师讲的过多,学生有被牵着鼻子走的感觉',
        '学生学习兴趣不足,部分学生甚至出现上课打哈欠打盹的情况,说明教师讲课不够精彩,过于枯燥',
        '对后排学生关心不够,板书时字体不够大,学生需要努力看识别,影响学习效率,学生跟不上老师思路',
        '课件页面过于简陋,内容过于静态缺少动态幻灯片,建议在课件中添加有助于调动学生兴趣与注意力的动画',
        '学生学习动机不够强烈,学生对教师过于依赖,教师仍处于主导地位,建议教师采用更加民主的授课方式,建立开放民主的课堂氛围',
        '学生上课发言不够积极,教师在课上只提问固定部分学生,不够民主,应该给每一位学生发言的机会,教师积极鼓励学生发言',
        '教师对部分知识点讲解的不够充分,忽视了学生的心理活动差异和学生的学习接受能力,不利于个体的全面发展',
    ];
    var end10 = [
        '今后,我将通过持续的教学观察与反思,加深对教育教学过程和学生学习过程的认识,调整和改进自己的教学行为,提高教学效果 积极融入教学团队,参与分享与交流,提炼适合个人特点的教学信念,探 索有效的教学方式和方法,成为一个不断进取的 具有创新精神的教师',
        '通过这次观课,让我认识到,交际能力培养在教学实施中的重要地位 是重要的交际工具 学习的目的,不仅仅是掌握知识,更是为了提高运用进行交际的能力 教学的最终目的是获得为交际运用 的能力,这种能力只能通过实践训练才能获得 知识的传授不能代替听说读写技能训练和为交际运用能力 的培养,我们应在教学中将掌握知识 培养言语技能和为交际运用的能力有机地结合起来,达到学以致用的目的',
        '通过这次观课,让我认识到,建立良好的师生关系,对完成教学任务至关重要如果他们对某 个老师有好感,他们就对老师的这门课感兴趣并分外重视,肯下大气力学这门课 如果他们不喜欢某一位 老师,由于逆反心理,他们也就不愿学或不学这位老师的课 所以,教师要深入学生,和学生打成一片, 了解学生的兴趣,爱好,喜怒哀乐情绪的变化,时时处关心学生,爱护学生,尊重学生,帮助学生这样, 师生才能关系和谐,感情融洽,兴趣盎然地进行学习',
        '通过这次观课,让我认识到一节成功的活动课往往需要教师的周密思考,在课程设计和教学活 动中,教师,充分体现师生互动 生生互动原则 尽可能多地考虑师生的共同参与性与互动性,操练过程 中的趣味性和交际性,充分体现学生学习的自主性和参与性',
        '通过这次观课,让我认识到,无论哪种教法,其基本出发点是学生,学生是课堂的主体 课堂 应当是学堂,是学生学习的天堂 课堂教学应当充分发挥学生主体的积极性 教学活动以学生在课堂上做 事为主,教师的作用是负责组织 引导 帮助和监控,引导学生学会认知 学会做事,让学生经历获取知 识的过程,关注学生各种能力的发展,促进其知识与技能过程与方法态度与价值观的全面发展,建立学生自主探索合作学习的课堂模式,创设和谐 宽松 民主的课堂环境 追求学习结果转向追求学习过 程,真正把学生当成获取知识发展自我的主人 一切为了学生,为了学生的一切,为了一切学生 ,切实构建以学生为中心主体观',
        '通过这次观课,让我认识到,要培养学生的创造个性,仅停留在创设教学情境上是不够的 教 师首先要具有创新的精神, 尊重每个学生, 积极鼓励他们大胆的尝试 . ,对他们在学习过程中犯的错误要采 取宽容的态度,注重创设宽松 和谐的教学氛围,尊重学生个性,气氛营造上多想想办法 注重抓住一切 时机激发学生创新的欲望,注意对学生的学习行为和学习结果反应等做出客观公正热情诚恳的评价',
        '通过这次观课, 使我的教学观念发生了转变 教学不是知识的教学而是言语技能的教学 过去, 由于考试指挥棒的影响,教师过分强调知识的教学,结果培养了一批 哑巴 聋子 今后我要把教学的 重点放在培养学生的言语能力,在言语运用中引导学生学习 教材只是学生学习的基础 媒介,学生要学 好就必须融入的海洋,跟上发展的步伐 因此我也时常在教材教学的基础上随时把鲜活的输入教学,让学 生能够感受,能够使用表达自己的思想',
    ]

    function getAtip(good, bad) {
        var goodx = deepCopy(good);
        var badx = deepCopy(bad);
        myTxt = [];
        myTxt.push(randomOne(first));
        var goodxx = randomOne(badx);
        myTxt.push(randomOne(goodx));
        del(goodx, goodxx);
        myTxt.push(randomOne(but));
        var badxx = randomOne(badx);
        myTxt.push(badxx);
        del(badx, badxx);
        myTxt.push(randomOne(then));
        myTxt.push(randomOne(badx));
        myTxt.push(randomOne(end));
        myTxt.push(randomOne(goodx));
        return myTxt.join(',') + '。';
    }

    function getBtip(good, bad, endx) {
        var goodx = deepCopy(good);
        var badx = deepCopy(bad);
        myTxt = [];
        myTxt.push(randomOne(first));
        var goodxx = randomOne(badx);
        myTxt.push(randomOne(goodx));
        del(goodx, goodxx);
        myTxt.push(randomOne(but));
        var badxx = randomOne(badx);
        myTxt.push(badxx);
        del(badx, badxx);
        myTxt.push(randomOne(then));
        myTxt.push(randomOne(badx));
        myTxt.push(randomOne(end));
        myTxt.push(randomOne(endx));
        return myTxt.join(',') + '。';
    }

    function del(arr, obj) {
        arr.splice(arr.indexOf(obj), 1)
    }

    function deepCopy(obj) {
        // 只拷贝对象
        if (typeof obj !== 'object') return;
        // 根据obj的类型判断是新建一个数组还是一个对象
        var newObj = obj instanceof Array ? [] : {};
        for (var key in obj) {
            // 遍历obj,并且判断是obj的属性才拷贝
            if (obj.hasOwnProperty(key)) {
                // 判断属性值的类型，如果是对象递归调用深拷贝
                newObj[key] = typeof obj[key] === 'object' ? deepCopy(obj[key]) : obj[key];
            }
        }
        return newObj;
    }

    function randomOne(list) {
        return list[randomNum(0, list.length - 1)];
    }

    function getScore(index) {
        switch (index) {
            case 9: return randomNum(3, 4);
            case 4: return randomNum(9, 14);
            default: return randomNum(7, 9);
        }
    }

    function getTip(index) {
        switch (index) {
            case 0: return getAtip(good0, bad0);//教材与学情分析准确、全面,教学目标明确、具体、可观测、可操作、可评价,体现三维目标整体要求,重点、难点处理符合学生认知规律,情境与活动设计指向问题解决,
            case 1: return getAtip(good1, bad1);//教学环节相对完整、过程流畅、结构清晰,课堂容量适当,时间布局合理,
            case 2: return getAtip(good2, bad2);//教学组织形式多样,方法有效,引导学生自主、合作、探究学习,反馈和评价及时恰当,
            case 3: return getAtip(good3, bad3);//面向全体、注重差异,学生参与面广,突出学生主体性和教学互动性,
            case 4: return getAtip(good4, bad4);//熟练、合理地应用信息技术手段,应用信息技术支持学生学习、课堂交流和教学评价,应用数字资源改变教学内容呈现方式,帮助学生理解、掌握和应用知识,
            case 5: return getAtip(good5, bad5);//使用普通话,语言准确、生动、富有激情和启迪性,教态亲切和蔼,在教学策略、方法、手段上有独到之处、有亮点,
            case 6: return getAtip(good6, bad6);//学生学习兴趣浓厚,积极主动,参与度高,在学习活动中获得良好体验,课堂气氛活跃有序,
            case 7: return getAtip(good7, bad7);//完成本节课既定的教学目标,使不同层次的学生都能基本掌握本节课所学知识,并各有收获,
            case 8: return getAtip(good8, bad8);//能推动学生在学科思维、实践能力和情感态度等某一方面得到有效发展,加强学科知识与生活联系,引导学生解决现实生活中的实际问题,
            case 9: return getAtip(good9, bad9);//晒课界面组织合理、信息完整、语言规范,课件运行正常,链接准确,视频拍摄内按容完整、画面清晰,声画同步,
            case 10: return getBtip(good10, bad10, end10);//阐述自己对本节课例提供相关资料的总体评价,体现自身专业水平,字数要求：200< 4 <1000字,
            default: return '不错,挺好,完美';
        }
    }

    //按钮布局样式
    var fuck_wangke = '<a id="fuck_wangkex" href="javascript:void(0)">一键填写</a>';
    var goto = '<div class="goTo"> <p><button class="toTop">↑</button></p><p><button class="toBottom">↓</button></p></div>';
    var mycss = {
        'background-color': 'rgb(188, 0, 45)',
        'border': 'none',
        'color': 'white',
        'margin': '30px',
        'padding': '10px 30px',
        'text-align': 'center',
        'text-decoration': 'none',
        'font-size': '16px'
    };
    var globleCss = heredoc(function () {/*
    .toTop, .toBottom {
        width: 50px;
        border: 0px solid gray;
        border-radius: 50px;
        cursor: pointer;
        color: white;
        background-color: #67c2ef;
        font-size: 18px;
        padding: 10px;
    }
	.box{
		margin:30px auto;
		width:800px;
		height:230px;
		background:#060;
		color:white;
		font-size:20px;}
	.goTo{
		position:fixed;
		right:30px;
        bottom:30px;}
    */});

    function heredoc(fn) {
        return fn.toString().split('\n').slice(1, -1).join('\n') + '\n';
    }

    function inject() {
        setTimeout(function () {
            var node = $(".mt-3");
            if (node.length > 0 && $("#fuck_wangkex").length < 1) {
                node.append(fuck_wangke);//绑定布局
                $("#fuck_wangkex").css(mycss);//绑定样式
                node.append(goto);//绑定布局
                document.getElementsByTagName("style")[0].innerHTML += globleCss;
                $("#fuck_wangkex").click(function () {//绑定事件
                    startEdit();
                });
                $(".toTop").click(function () {
                    $("html,body").finish().animate({ "scrollTop": "0px" }, 900);
                });

                $(".toBottom").click(function () {
                    $("html,body").finish().animate({ "scrollTop": node.offset().top }, 900);
                });
                inject();
                console.log('注入成功');
            } else {
                inject();
                console.log('等待注入');
            }
        }, 1 * 1000);
    }

    //生成从minNum到maxNum的随机数
    function randomNum(minNum, maxNum) {
        switch (arguments.length) {
            case 1:
                return parseInt(Math.random() * minNum + 1, 10);
                break;
            case 2:
                return parseInt(Math.random() * (maxNum - minNum + 1) + minNum, 10);
                break;
            default:
                return 0;
                break;
        }
    }

    function keyboardInput(dom, st) {
        var evt = new InputEvent('input', {
            inputType: 'insertText',
            data: st,
            dataTransfer: null,
            isComposing: false
        });
        dom.value = st;
        dom.dispatchEvent(evt);
    }

    function startEdit() {
        $("input").each(function (index) {
            var score = getScore(index);
            keyboardInput(this, score);
        });

        $("textarea").each(function (index) {
            var tip = getTip(index);
            keyboardInput(this, tip);
        });

        $(".btn-outline-info")[1].click();
    }

    $(function () {//主函数
        inject();
    });
})();
